package com.hy.admin.service;

import java.io.IOException;
import java.util.List;

import org.springframework.web.multipart.MultipartFile;

import com.hy.admin.entity.CourseEntity;
import com.hy.admin.entity.CourseInfoEntity;
import com.hy.admin.entity.FreeCourseTypeEntity;
import com.hy.admin.helper.response.ContentResponse;
import com.hy.admin.helper.response.CourseIntroResponse;
import com.hy.admin.helper.response.CourseResponse;
import com.hy.admin.helper.response.HomeResponse;
import com.hy.admin.helper.response.OrderResponse;
import com.hy.core.response.ServicesResult;

/**
 * Created by yangqq on 18/4/4.
 */
public interface CourseService {
    /**
     * 首页课程
     * @return
     */
    ServicesResult<HomeResponse> homeCourse();
    /**
     * 查询所有课程
     * @return
     */
    ServicesResult<List<CourseInfoEntity>> allCourse(Integer pageNum, Integer pageSize);
    /**
     * 查询用户购买的课程
     * @param memberId
     * @return
     */
    ServicesResult<List<CourseInfoEntity>> listByMemberBuy(Long memberId,Integer pageNum,Integer pageSize);

    /**
     * 查询教师的所有课程
     * @param memberId
     * @return
     */
    ServicesResult<List<CourseResponse>> listByMemberId(Long memberId,Integer pageNum,Integer pageSize);
    /**
     * 查询课程系列下的所有课程
     * @param seriesId
     * @return
     */
    ServicesResult<List<CourseInfoEntity>> listBySeriesId(Long seriesId);

    /**
     * 根据关键字搜索课程
     * @param keyword
     * @return
     */
    ServicesResult<List<CourseInfoEntity>> search(String keyword);

    /**
     * 课程详情
     * @param id
     * @param memberId
     * @return
     */
    ServicesResult<CourseResponse> detail(Long id, Long memberId);

    /**
     * 课程简介
     * @param id
     * @return
     */
    ServicesResult<CourseIntroResponse> introduce(Long id);

    /**
     * 购买课程--创建订单
     * @param memberId
     * @param courseId
     * @return
     */
    ServicesResult<OrderResponse> buy(Long memberId, Long courseId);

    /**
     * 课程购买成功---处理订单支付状态，增加教师账户金额
     * @param orderId
     * @return
     */
    ServicesResult<Boolean> paySuccess(Long orderId) throws Exception;

    /**
     * 上传课程
     * @param courseEntity
     * @param file
     * @return
     */
    ServicesResult<Boolean> addWithFile(CourseEntity courseEntity, MultipartFile file, MultipartFile image) throws Exception;

    /**
     * 上传课程
     * @param courseEntity
     * @return
     */
    ServicesResult<Boolean> add(CourseEntity courseEntity);

    /**
     * 查询语音识别结果
     * @param taskId
     * @param filePath
     * @return
     */
    String queryTranResult(String taskId, String filePath);

    /**
     * 保存转换成功的文本
     * @param uuid
     * @param content
     * @return
     */
    int updateContent(String uuid, String content);

    /**
     * 语音转文本失败，记录失败数据
     * @param uuid
     * @return
     */
    int addTranslateFailLog(String uuid);

    /**
     * 增加课程点击量
     * @param courseId
     * @return
     */
    ServicesResult<Boolean> addClickNum(Long courseId);

    /**
     * 下载文件
     * @param courseId
     * @param localFilePath
     * @return
     */
    ServicesResult<Boolean> downloadFile(Long courseId, String localFilePath);

    ServicesResult<ContentResponse> getContent(Long courseId);

    ServicesResult<Boolean> updateContent(Long courseId, String content);

    ServicesResult<Boolean> updatePrice(Long courseId, Double price);
    
    /**
     * 审核教师
     * @param courseId
     * @return
     */
    ServicesResult<Boolean> audit(Long courseId, Integer auditStatus);

    /**
     * 获取教师课程数量
     * @param memberId
     * @return
     */
     int countByMemberId(Long memberId);

    /**
     * 分页查询免费课程--后台接口
     * @param nickName
     * @param title
     * @param pageNum
     * @param pageSize
     * @return
     */
    ServicesResult<List<CourseInfoEntity>> freeCourse(String nickName, String title, Integer pageNum, Integer pageSize);

    /**
     * 分页查询精品课程--后台接口
     * @param nickName
     * @param title
     * @param pageNum
     * @param pageSize
     * @return
     */
    ServicesResult<List<CourseInfoEntity>> chargeCourse(String nickName, String title, Integer pageNum, Integer pageSize);

    ServicesResult<Boolean> setTop(Integer isFree, String ids) throws Exception;

    ServicesResult<Boolean> cancelTop(String ids);

    ServicesResult<Boolean> setCourseType(Long id, Integer courseType);
    
    /**
     * <p>Title: getCourseFreeType 查询免费课程类型</p>  
     * <p>Description: </p>  
     * @param courseId
     * @return
     */
    ServicesResult<FreeCourseTypeEntity> getCourseFreeType(Long courseId);

    /**
     * 修改课程封面
     * @param id
     * @return
     */
    ServicesResult<Boolean> updateFaceImg(Long id, MultipartFile file) throws IOException;

}
